import Parse from 'parse'
import axios from 'axios'
import { MessageBox } from 'mint-ui'

import router from '@/router'

let openid

export const wxpay = (order) => {
  axios.get(`http://120.55.49.187/wx/pay?openid=${openid}&out_trade_no=${order.objectId}&total_fee=${order.actualPrice}`)
    .then(data => {
      console.log(data)
      window.wx.chooseWXPay({
        timestamp: 0, // 支付签名时间戳，注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
        nonceStr: '', // 支付签名随机串，不长于 32 位
        package: '', // 统一支付接口返回的prepay_id参数值，提交格式如：prepay_id=***）
        signType: '', // 签名方式，默认为'SHA1'，使用新版支付需传入'MD5'
        paySign: '', // 支付签名
        success: function (res) {
          // 支付成功后的回调函数
        }
      })
    }).catch(() => {
      MessageBox.confirm('微信支付暂未开通，进入开发模式，确定支付？')
        .then(action => {
          new Parse.Query('Order').get(order.objectId)
            .then(order => {
              order.set('orderStatus', 2)
                .save()
                .then(() => {
                  router.replace(`/order/list/2`)
                })
            })
        }).catch(() => {
          router.back()
        })
    })
}

export const init = () => {
  login()
  config()
}

function getUserInfo (accessToken, openid) {
  axios.get(`https://api.weixin.qq.com/sns/userinfo?access_token=${accessToken}&openid=${openid}&lang=zh_CN`)
    .then(resp => JSON.parse(resp.data))
}

function login () {
  if (Parse.User.current() && Parse.User.current().get('openid')) {
    return
  }
  let code = new URL(location.href).searchParams.get('code')
  if (!code) {
    console.warn('code is null')
    return
  }

  Parse.Cloud.run('wxLogin', {code})
    .then(data => {
      data = data || {}
      openid = data.openid
      let myAuthData = {
        authData: {
          'id': data.openid,
          'access_token': data.access_token
        }
      }
      let user = new Parse.User()
      user._linkWith('wechat', myAuthData).then(function (user) {
        getUserInfo(myAuthData.access_token, myAuthData.id).then(r => {
          user.set('openid', data.openid)
          user.set('nickname', r.nickname)
          user.set('headimgurl', r.headimgurl)
          user.save()
        })
      }).catch((err) => {
        // login as anonymous
        console.log(err)
        debugError(err)
      })
    }).catch(err => console.log(err))
}

function config () {
  Parse.Cloud.run('wxConfig', {
    key: 'http://wx.zhiyaohaodongxi.com/'
  })
    .then((data) => {
      console.log(data)
      data = Object.assign({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
        appId: 'wx5bf4075464dbf562', // 必填，公众号的唯一标识
        timestamp: '', // 必填，生成签名的时间戳
        nonceStr: data.noncestr, // 必填，生成签名的随机串
        signature: '', // 必填，签名，见附录1
        jsApiList: ['chooseWXPay', 'previewImage'] // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
      }, data)
      window.wx.config(data)
    })
}

// develop purpose
function debugError () {
  if (!Parse.User.current()) {
    Parse.User.logIn('anonymous', 'anonymous', {
      success: function (user) {
        // Do stuff after successful login.
        console.log(user)
        user.set('nickname', '匿名')
        user.set('headimgurl', '/static/person.png')
        user.save()
      },
      error: function (user, error) {
        user = new Parse.User()
        user.set('username', 'anonymous')
        user.set('password', 'anonymous')
        user.signUp(null, {
          success: function (user) {
            // Hooray! Let them use the app now.
            console.log(user)
          },
          error: function (user, error) {
            // Show the error message somewhere and let the user try again.
            console.log('Error: ' + error.code + ' ' + error.message)
          }
        })
      }
    })
  }
}

